From: Thomas Wood Date: Tue, 20 Oct 2009 13:22:17 +0000 (+0100) Subject: fix issues with hint text X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~10351 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=d593877548cc80db2bb0ed0795b652a37851172c;p=gnome-shell.git fix issues with hint text Add a "hint_visible" private variable to keep track of when the hint text is visible. Use this to determine whether to return the text from the internal ClutterText or whether to return an empty string. Fixes: http://bugzilla.moblin.org/show_bug.cgi?id=6837 http://bugzilla.moblin.org/show_bug.cgi?id=6836 https://bugzilla.gnome.org/show_bug.cgi?id=611095 --- diff --git a/src/st/st-entry.c b/src/st/st-entry.c index 1c3e3ae12..77e61abf4 100644 --- a/src/st/st-entry.c +++ b/src/st/st-entry.c @@ -97,6 +97,8 @@ struct _StEntryPrivate ClutterActor *secondary_icon; gfloat spacing; + + gboolean hint_visible; }; static guint entry_signals[LAST_SIGNAL] = { 0, }; @@ -375,9 +377,10 @@ clutter_text_focus_in_cb (ClutterText *text, StEntryPrivate *priv = ST_ENTRY_PRIV (actor); /* remove the hint if visible */ - if (priv->hint - && !strcmp (clutter_text_get_text (text), priv->hint)) + if (priv->hint && priv->hint_visible) { + priv->hint_visible = FALSE; + clutter_text_set_text (text, ""); } st_widget_set_style_pseudo_class (ST_WIDGET (actor), "focus"); @@ -393,6 +396,8 @@ clutter_text_focus_out_cb (ClutterText *text, /* add a hint if the entry is empty */ if (priv->hint && !strcmp (clutter_text_get_text (text), "")) { + priv->hint_visible = TRUE; + clutter_text_set_text (text, priv->hint); st_widget_set_style_pseudo_class (ST_WIDGET (actor), "indeterminate"); } @@ -705,7 +710,10 @@ st_entry_get_text (StEntry *entry) { g_return_val_if_fail (ST_IS_ENTRY (entry), NULL); - return clutter_text_get_text (CLUTTER_TEXT (entry->priv->entry)); + if (entry->priv->hint_visible) + return ""; + else + return clutter_text_get_text (CLUTTER_TEXT (entry->priv->entry)); } /** @@ -731,6 +739,7 @@ st_entry_set_text (StEntry *entry, && !HAS_FOCUS (priv->entry)) { text = priv->hint; + priv->hint_visible = TRUE; st_widget_set_style_pseudo_class (ST_WIDGET (entry), "indeterminate"); } else @@ -739,6 +748,8 @@ st_entry_set_text (StEntry *entry, st_widget_set_style_pseudo_class (ST_WIDGET (entry), "focus"); else st_widget_set_style_pseudo_class (ST_WIDGET (entry), NULL); + + priv->hint_visible = FALSE; } clutter_text_set_text (CLUTTER_TEXT (priv->entry), text); @@ -786,8 +797,11 @@ st_entry_set_hint_text (StEntry *entry, priv->hint = g_strdup (text); - if (!strcmp (clutter_text_get_text (CLUTTER_TEXT (priv->entry)), "")) + if (!strcmp (clutter_text_get_text (CLUTTER_TEXT (priv->entry)), "") + && !HAS_FOCUS (priv->entry)) { + priv->hint_visible = TRUE; + clutter_text_set_text (CLUTTER_TEXT (priv->entry), priv->hint); st_widget_set_style_pseudo_class (ST_WIDGET (entry), "indeterminate"); }